Amazon EC2でEphemeral StoreをRAID0構成にしてディスクI/O性能を上げる
Ephemeral Storeは一時的なメモリドライブのようなもの
Ephemeral Store(Instance Store)は、EBSブートのEC2インスタンス(Smallインスタンス以上)を立ち上げた際にオマケのように付いてくる領域です。インスタンスをTerminateすると一緒に消えてしまいます。とはいえ、インスタンスが起動中はずっと使うことができますので、ある程度高速に動作させたい場合には最適かもしれません。Management Consoleからは操作できないため、あまり知られていないかと思いますが、ドキュメントにはしっかり書いてあります。今回はこのEphemeral Storeを用いてRAID0構成を組みたいと思います。
Epemeral Storeを指定してインスタンスを起動する
Epemeral Storeを使用するために起動オプションを付けます。今回はRAID0用に4ドライブ使いたいため、Extra Largeインスタンスを指定しました。
$ ec2-run-instances ami-e8fa4ee9 -b /dev/sdb=ephemeral0 -b /dev/sdc=ephemeral1 --region ap-northeast-1 -t m1.small -k mykey1 --user-data-file config.txt
必要となるアプリをインストールします。
$ sudo yum update -y $ sudo yum install mdadm xfsprogs -y $ sudo yum install bonnie++ --enablerepo=epel -y
RAID0設定をする
インタンスが起動したらdfコマンドでEpemeral Storeがマウントされていることを確認してください。起動時にconfigを指定していないとデフォルト動作として勝手にマウントしてしまいます。これをアンマウントしておきましょう。続いてmdadmを使ってRAID0構成を作成します。この例は2台の場合です。
$ sudo mdadm --create --verbose /dev/md0 --level=0 -c256 --raid-devices=2 /dev/sdb /dev/sdc $ sudo blockdev --setra 65536 /dev/md0 $ sudo mkfs.xfs /dev/md0 -f $ echo DEVICE /dev/sdb /dev/sdc | sudo tee /etc/mdadm.conf DEVICE /dev/sdb /dev/sdc $ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf ARRAY /dev/md0 metadata=1.2 name=ip-10-156-99-253:0 UUID=650b41fe:9261e9c8:da982ef0:74f04579 $ sudo mkdir -p /mnt/md0 && sudo mount -o noatime /dev/md0 /mnt/md0
サクッと出来上がりました。4台の場合には以下のように設定してください。
$ ec2-run-instances ami-e8fa4ee9 -b /dev/sdb=ephemeral0 -b /dev/sdc=ephemeral1 -b /dev/sdd=ephemeral2 -b /dev/sde=ephemeral3 --region ap-northeast-1 -t m1.xlarge -k mykey1 --user-data-file config.txt $ sudo mdadm --create --verbose /dev/md0 --level=0 -c256 --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde
測定はいつものとおりです。
$ sudo bonnie++ -d /mnt/md0/ -u root -q | sudo bon_csv2html > output.html
Largeインスタンス(Ephemeral Store)1台構成 - 64bit
以下は平均値です。
- ブロック書き込み:66479 kB/Sec
- ブロックリライト:76964 kB/Sec
- ブロック読み込み:1149932 kB/Sec
- ランダムシーク :3834 /Sec
Largeインスタンス(Ephemeral Store)RAID0 2台構成 - 64bit
以下は平均値です。
- ブロック書き込み:143447 kB/Sec
- ブロックリライト:166711 kB/Sec
- ブロック読み込み:1135717 kB/Sec
- ランダムシーク :6993 /Sec
Extra Largeインスタンス(Ephemeral Store)1台構成 - 64bit
以下は平均値です。
- ブロック書き込み:66283 kB/Sec
- ブロックリライト:82933 kB/Sec
- ブロック読み込み:1614461 kB/Sec
- ランダムシーク :4262 /Sec
Extra Largeインスタンス(Ephemeral Store)RAID0 2台構成 - 64bit
以下は平均値です。
- ブロック書き込み:133287 kB/Sec
- ブロックリライト:150758 kB/Sec
- ブロック読み込み:1545761 kB/Sec
- ランダムシーク :8005 /Sec
Extra Largeインスタンス(Ephemeral Store)RAID0 4台構成 - 64bit
以下は平均値です。
- ブロック書き込み:93643 kB/Sec
- ブロックリライト:221281 kB/Sec
- ブロック読み込み:1565134 kB/Sec
- ランダムシーク :13679 /Sec
RAID0 平均値を一覧表示する
Large(m1.large) | ブロック書き込み(KB/Sec) | ブロックリライト(KB/Sec) | ブロック読み込み(KB/Sec) | ランダムシーク(/Sec) | 単価($/h) Linux, Tokyo |
---|---|---|---|---|---|
1台 | 66479 | 76964 | 1149932 | 3834 | 0.40 |
RAID0 2台 | 143447 | 166711 | 1135717 | 6993 | - |
Extra Large (m1.xlarge) | ブロック書き込み(KB/Sec) | ブロックリライト(KB/Sec) | ブロック読み込み(KB/Sec) | ランダムシーク(/Sec) | 単価($/h) Linux, Tokyo |
---|---|---|---|---|---|
1台 | 66283 | 82933 | 1614461 | 4262 | 0.80 |
RAID0 2台 | 133287 | 150758 | 1545761 | 8005 | - |
RAID0 4台 | 93643 | 221281 | 1565134 | 13679 | - |
まとめ
えー、今回で人柱的な実験は最後となります。これらの結果を踏まえまして、次回はグラフで比較をしたいと思います。お楽しみに!